package com.github.zangxiaoqiang.common.mail;
import java.io.IOException;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.AuthenticationFailedException;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import com.github.zangxiaoqiang.common.conf.ConfigurationManager;
import com.github.zangxiaoqiang.common.conf.GitConfiguration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.sun.mail.smtp.SMTPMessage;
public class MailSender {
protected static final Logger LOG = LoggerFactory.getLogger(MailSender.class);
private String[] mailGroup = new String[1];
private String smtpServer;
private final static String SMTP_SERVER= "SMTP_SERVER";
private final static String MAIL_GROUP = "Admin_MAIL";
private static String DEFAULT_SMTP_SERVER= "10.224.160.15";
private static String DEFAULT_MAIL_GROUP = "hadoopor@github.com";
private GitConfiguration mailConfig = ConfigurationManager.getConfigFrom("mailConfig.properties");
/**
* SendMailService
*/
public MailSender() {
smtpServer = mailConfig.getValue(SMTP_SERVER, DEFAULT_SMTP_SERVER);
mailGroup = mailConfig.getValue(MAIL_GROUP, DEFAULT_MAIL_GROUP).split("[,;]");
}
/**
*
* @param mailBean
*/
public int sendMail(MailBean mailBean) throws IOException,
MessagingException {
Properties props = System.getProperties();
props.put("mail.smtp.host", mailBean.getSMTPHost());
props.put("mail.smtp.port", mailBean.getSMTPPort()==null?25:mailBean.getSMTPPort());
if(mailBean.isNeedAuth()){
props.put("mail.smtp.auth", "true");
}else {
props.put("mail.smtp.auth", "false");
}
MailAuth auth = new MailAuth();
Session session = Session.getInstance(props, auth);
Transport transport = null;
try {
transport = session.getTransport("smtp");
} catch (NoSuchProviderException e1) {
e1.printStackTrace();
}
MimeMessage mime = new MimeMessage(session);
Address[] addresses = new Address[1];
Message msg = null;
try {
mime.setSubject(mailBean.getSubject());
mime.setContent(mailBean.getMsgContent(), mailBean.getMessageContentMimeType());
msg = new SMTPMessage(mime);
addresses[0] = new InternetAddress(mailBean.getMailTo());
} catch (MessagingException e1) {
e1.printStackTrace();
}
try {
if(mailBean.isNeedAuth()){
transport.connect(mailBean.getMailFrom(), mailBean.getMailPass());
}else{
transport.connect();
}
transport.sendMessage(msg, addresses);
LOG.info("Send Mail To : "+ mailBean.getMailTo() +" Successfully!");
} catch (AuthenticationFailedException e) {
LOG.error("Authentication failed for mail sender.");
return -1;
} catch (MessagingException e) {
LOG.error(e.getMessage());
return -1;
} finally{
transport.close();
}
return 0;
}
/**
* @param receiver
* @param subject
* subject of this mail
* @param content
* the message
* */
public void sendMail(String receiver, String subject, String content) throws IOException,
MessagingException {
MailBean mb = MailBean.getDefaultMailBean();
mb.setSMTPHost(getSMTPHost());
mb.setSubject(subject);
mb.setMailTo(receiver);
mb.setMsgContent(content);
mb.setAuth(false);
sendMail(mb);
}
/**
* @param subject
* subject of this mail
* @param content
* the message
* */
public void sendMail(String subject, String content) throws IOException,
MessagingException {
for (String receiver : getMailGroup()) {
sendMail(receiver, subject, content);
}
}
public void sendMail(String smtpHost, String port, String fromAdd, String pwd, String toAdd, String subject, String msg) throws IOException,
MessagingException {
MailBean mb = MailBean.getDefaultMailBean();
mb.setSubject(subject);
mb.setSMTPHost(getSMTPHost());
mb.setSMTPPort(port);
mb.setMailFrom(fromAdd);
mb.setMailPass(pwd);
mb.setMailTo(toAdd);
mb.setMsgContent(msg);
mb.setAuth(true);
sendMail(mb);
}
private String getSMTPHost(){
return smtpServer;
}
private String[] getMailGroup() {
return mailGroup;
}
}